home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / asm / fastsincos.lha / fastsincos / fastatan2.asm < prev    next >
Assembly Source File  |  2000-04-12  |  946b  |  76 lines

  1.     incdir    asm:
  2.     include    exec/execbase.i
  3.     include    math.i
  4.     include    phxmacros.i
  5.  
  6.     xref    fastacos___r_d
  7.     xref    fastacos
  8.  
  9. ;w=atan(y/x)=fastacos(x/sqrt(x*x+y*y))
  10.  
  11.     xdef    fastatan2___r_dd
  12.     xdef    _fastatan2__r
  13. fastatan2___r_dd
  14. _fastatan2__r
  15.     fmove.d    4(sp),fp0
  16.     fmove.d    12(sp),fp1
  17.     fbeq    .xnull
  18.     fmul.x    fp0,fp0
  19.     fmul.x    fp1,fp1
  20.     fadd.x    fp0,fp1
  21.     fsqrt.x    fp1
  22.     fmove.d    12(sp),fp0
  23.     fdiv.x    fp1,fp0
  24.     fmove.d    fp0,-(sp)
  25.     jsr    fastacos___r_d
  26.     add.w    #8,sp
  27.     bra    .cont
  28.  
  29. .xnull
  30.     ftst.x    fp0
  31.     fbeq    .ynull
  32.     fmove.d    #PI2,fp0
  33.  
  34. .cont
  35.     tst.l    4(sp)    ;faster than ftst.d
  36.     bpl    .ret
  37.     fneg.x    fp0
  38.  
  39. .ret
  40.     rts
  41.  
  42. .ynull
  43.     fmove.s    #0,fp0
  44.     rts
  45.  
  46.     xdef    fastatan2
  47. fastatan2
  48.     fmove.d    4(sp),fp0
  49.     fmove.d    12(sp),fp1
  50.     fbeq    .xnull
  51.     fmul.x    fp0,fp0
  52.     fmul.x    fp1,fp1
  53.     fadd.x    fp0,fp1
  54.     fsqrt.x    fp1
  55.     fmove.d    12(sp),fp0
  56.     fdiv.x    fp1,fp0
  57.     jsr    fastacos
  58.     bra    .cont
  59.  
  60. .xnull
  61.     ftst.x    fp0
  62.     fbeq    .ynull
  63.     fmove.d    #PI2,fp0
  64.  
  65. .cont
  66.     tst.l    4(sp)    ;faster than ftst.d
  67.     bpl    .ret
  68.     fneg.x    fp0
  69.  
  70. .ret
  71.     rts
  72.  
  73. .ynull
  74.     fmove.s    #0,fp0
  75.     rts
  76.